home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_01_04 / 1n04070a < prev    next >
Text File  |  1990-07-30  |  2KB  |  60 lines

  1.         page    55, 132
  2.  
  3. ;
  4. ;  READISK.ASM
  5. ;
  6. ;  Corrects readisk function in Figure 1 of July Tech Specialist
  7. ;  "Exploiting DOS" column.
  8. ;
  9. ;  Requires MASM 5.1 or later
  10. ;
  11.  
  12. %       .MODEL  memodel,C               ;Add model support via
  13.                                         ;command line macro,
  14.                                         ;e.g. MASM /Dmemodel=LARGE
  15.         extrn _osmajor:BYTE
  16.  
  17.         .DATA
  18. start   dw      ?
  19. fill    dw      0
  20. number  dw      ?
  21. buf     dw      ?,?
  22.  
  23.         .CODE
  24. readisk PROC USES SI DI, drive:WORD, num_sec:WORD, start_sec:WORD, buffer:PTR
  25.         mov     AX,drive        ;Get drive number in AL
  26.         mov     AH,_osmajor     ;Load OS version in AH
  27.         mov     CX,num_sec      ;Set up regs for DOS 3 call
  28.         mov     DX,start_sec
  29.     IF  @DataSize
  30.         push    DS              ;Save DS in L & C models
  31.         lds     BX,buffer
  32.     ELSE
  33.         mov     BX,buffer
  34.     ENDIF
  35.         cmp     AH,4            ;DOS 4+?
  36.         jb      doint           ;No, skip it
  37.         mov     start,DX        ;Yes, fill in DCB structure
  38.         mov     number,CX
  39.         mov     buf,BX
  40.         mov     buf+2,DS
  41.         mov     cx,-1
  42.     IF  @DataSize               ;Point to DCB
  43.         mov     BX,@Data
  44.         mov     DS,BX
  45.     ENDIF
  46.         mov     bx,OFFSET start
  47. doint:  int     25h             ;Read sector
  48.         mov     AX,0            ;Set up no error return
  49.         jnc     bye             ;Error?
  50.         dec     AX              ;Yes, flag it
  51. bye:    add     SP,2            ;Int 25h leave the flags on the stack
  52.     IF  @DataSize
  53.         pop     DS              ;Restore DS in L & C models
  54.     ENDIF
  55.         ret
  56.  
  57. readisk ENDP  
  58.  
  59.         end
  60.